﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using System.Text;
using System.IO;

using MLopez.BizVal.CW.Base;

namespace MLopez.BizVal.CW.XML
{
    public class XMLParser
    {
        public static Jerarquia DeseralizeJerarquia(FileInfo file)
        {

            Jerarquia retVal = new Jerarquia();
            XmlReader reader = XmlReader.Create(file.OpenText());
            while (reader.NodeType != XmlNodeType.Element)
                reader.Read();
            XElement root = XElement.Load(reader);
            string nombre = root.Attribute("nombre").Value;
            retVal.Nombre = nombre;

            IEnumerable<XElement> niveles = from nivel in root.Elements("nivel")
                                            select nivel;
            foreach (XElement nivel in niveles)
            {
                ProcesarNivel(nivel, retVal);
            }
            return retVal;
        }
             
            
             
    

        private static void ProcesarNivel(XElement nivel, Jerarquia retVal)
        {
            string nombre;
            XAttribute atrCardinalidad = nivel.Attribute("cardinalidad");
            int cardinalidad = int.Parse(atrCardinalidad.Value);
            XAttribute xNombre = nivel.Attribute("nombre");
            if (xNombre != null)
                nombre = xNombre.Value;
            else
                nombre = retVal.Nombre;
            
            ConjuntoEtiquetas conjunto = retVal.AddNivel(cardinalidad);
            conjunto.Nombre = nombre;

            IEnumerable<XElement> etiquetas = from etiqueta in nivel.Elements("etiqueta")
                                              select etiqueta;
            foreach (XElement etiqueta in etiquetas)
            {
                int index = int.Parse(etiqueta.Attribute("indice").Value);
                string termino = etiqueta.Attribute("termino").Value;
                conjunto[index].Termino = termino;
            }
            
        }
    }
}
